package gui;

import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import persistencia.Comparador;
import persistencia.DownloadWSDL;
import persistencia.Parse;


public class Interface {
	private String arquivo;
	
	public Interface() {
		arquivo = null;
	}
	
	public String baixar() throws ParserConfigurationException, SAXException, IOException{
		DownloadWSDL wsdlBaixado = new DownloadWSDL("https://fps.amazonaws.com/doc/2008-09-17/AmazonFPS.wsdl");
		wsdlBaixado.baixar();
		return wsdlBaixado.nomeDoArquivo();
	}
	
	private ArrayList<String> comparar(String wsdlBaixado) throws ParserConfigurationException, SAXException, IOException{
		Comparador comparador = new Comparador();
		Parse parseWSDL = new Parse(wsdlBaixado);
		Parse parseXPEWS = new Parse(arquivo);
		
		comparador.inserirWSDLNaHash(parseWSDL.getPortType());
		comparador.inserirXPEWSNaHash(parseXPEWS.getPEWSOperations());
		return comparador.comparar(comparador.getHstsWSDL().get(0));
	}
	
	private ArrayList<String> operations() throws ParserConfigurationException, SAXException, IOException{
		Parse parseXPEWS = new Parse(arquivo);
		
		return parseXPEWS.getExtrator().retornarDadosPorNome("operations");
	}
	
	public ArrayList<String> exibirMetodosComparados() throws ParserConfigurationException, SAXException, IOException{
		ArrayList<String> metodosOK = comparar(baixar());
		ArrayList<String> metodos = operations();
		for(int i = 0; i < metodosOK.size(); i++){
			if(metodos.contains(metodosOK.get(i)))
				metodos.set(metodos.indexOf(metodosOK.get(i)), metodosOK.get(i) + "\t\t\t\t\t\t" + "OK");
		}
		metodosOK.clear();
		for(int i = 0; i < metodos.size(); i++){
			if(metodos.get(i).length() >= 3 && metodos.get(i).endsWith("OK") == false){
				metodos.set(i, metodos.get(i).toString().replace(',', ' ').trim() + "\t\t\t\t\t\t" + "NO");
				metodosOK.add(metodos.get(i));
			}
			else if(metodos.get(i).length() >= 3 && metodos.get(i).endsWith("OK"))
				metodosOK.add(metodos.get(i));
		}
		return metodosOK;
	}
	
	public ArrayList<String> listarOperations() throws ParserConfigurationException, SAXException, IOException{
		ArrayList<String> operations = operations();
		ArrayList<String> operationsF = new ArrayList<String>();
		for(int i = 0; i < operations.size(); i++){
			if(operations.get(i).length() >= 3){
				operations.set(i, operations.get(i).toString().replace(',', ' ').trim());
				operationsF.add(operations.get(i));
			}
		}
		return operationsF;
	}
	
	public String getArquivo(){
		return arquivo;
	}
	
	public void setArquivo(String arquivo){
		this.arquivo = arquivo;
	}
	
}
